package services

import (
	"GinWeb/dao"
	"GinWeb/models"
	"fmt"
	"strconv"

	"github.com/gin-gonic/gin"
)

type MsgServiceImpl struct{}

func NewMsgService() MsgService {
	return &MsgServiceImpl{}
}

func (receiver *MsgServiceImpl) GetMsgNotifyList(ctx *gin.Context) {
	userId, _ := ctx.Get("userId")
	fmt.Println(userId)
	// 根据用户ID获取所有信息
	msgList := []models.Msg{}
	dao.DB.Where("user_id = ?", userId.(int)).Find(&msgList)
	fmt.Println(msgList)
	// fmt.Println(msg)
	models.ReturnSuccess(ctx, "获取信息成功", msgList)
}

// 新增消息
func (receiver *MsgServiceImpl) AddMsg(c *gin.Context) {
	// userId := c.PostForm("userId")
	// JSON转对象
	msg := &models.Msg{}
	fmt.Println(msg)
	error := c.ShouldBindJSON(&msg)
	fmt.Println(error)
	if error != nil {
		models.ReturnError(c, "数据格式异常")
		return
	}
	userId, _ := c.Get("userId")
	msg.UserId = userId.(int)
	// 操作数据库
	dbError := dao.DB.Select("Content", "NotifyTime", "UserId").Create(&msg).Error
	if dbError != nil {
		models.ReturnError(c, "新增提示消息失败")
		return
	}
	models.ReturnSuccess(c, "新增成功", nil)
}

func (receiver *MsgServiceImpl) DeleteMsg(ctx *gin.Context) {
	// 获取参数
	idStr := ctx.Param("id")
	id, _ := strconv.Atoi(idStr)
	flag := checkMsgOwner(ctx, id)
	if !flag {
		return
	}
	// 操作数据库
	dbError := dao.DB.Delete(&models.Msg{}, id).Error
	if dbError != nil {
		models.ReturnError(ctx, "删除失败")
		return
	}
	models.ReturnSuccess(ctx, "删除成功", nil)
}

func (receiver *MsgServiceImpl) UpdateMsg(ctx *gin.Context) {
	// 获取参数
	idStr := ctx.Param("id")
	id, _ := strconv.Atoi(idStr)
	// JSON转对象
	msg := &models.Msg{}
	error := ctx.ShouldBindJSON(&msg)
	if error != nil {
		models.ReturnError(ctx, "数据格式异常")
		return
	}
	// 判断id是否存在
	flag := checkMsgOwner(ctx, id)
	if !flag {
		return
	}

	// 操作数据库，只允许修改时间和内容
	dbError := dao.DB.Model(&models.Msg{}).Where("id = ?", id).Updates(models.Msg{Content: msg.Content, NotifyTime: msg.NotifyTime}).Error
	if dbError != nil {
		models.ReturnError(ctx, "修改失败")
		return
	}
	models.ReturnSuccess(ctx, "修改成功", nil)
}

// 检查消息归属者
func checkMsgOwner(ctx *gin.Context, id int) bool {
	// 判断id是否存在
	msg2 := []models.Msg{}
	dao.DB.Where("id = ?", id).Find(&msg2)
	if len(msg2) == 0 {
		models.ReturnError(ctx, "id不存在")
		return false
	}
	userId, _ := ctx.Get("userId")
	if msg2[0].UserId != userId {
		models.ReturnError(ctx, "您非该消息的归属者")
		return false
	}
	return true
}
